﻿Imports System.Data.Common

Public Class Producto

    Public codProducto, codUsuario, idUniMed, codTalla, codColor, idSubgrupo, descripcion, _
        referencia, estante, bdReferencia, nomArchivo As String
    Public desuso, ctrlSerial As Char
    Public existencia, peso, stockMin, stockMax, costoUni, precio1, precio2, precio3, _
        porcDcto, porcIVA, existIni, costoProm, existPendi, porcUtil1, porcUtil2, porcUtil3 As Decimal
    Public fchVencimiento As System.DateTime

    Public Shared Function consGeneral(COD_PRODUCTO As String, REFERENCIA As String, DESCRIPCION As String) As DataTable
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            Dim condicion As String = ""
            sentencia = "SELECT COD_PRODUCTO, REFERENCIA, DESCRIPCION, EXISTENCIA, PRECIO_1, (PRECIO_1*PORC_IVA) AS PRECIO_IVA, PRECIO_2, PRECIO_3, PORC_IVA, PORC_DCTO, BD_REFERENCIA, CTRL_SERIAL,ID_UNIDAD_MEDIDA AS UNIDAD,COSTO_UNIT, PESO FROM PRODUCTO WHERE "
            conexion.ParametroEntrada = New List(Of DbParameter)
            If Not String.IsNullOrEmpty(COD_PRODUCTO) Then
                condicion = condicion & IIf(String.IsNullOrEmpty(condicion), "", " OR ") & " COD_PRODUCTO = @P_COD_PRODUCTO "
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, COD_PRODUCTO, "P_COD_PRODUCTO"))
            End If

            If Not String.IsNullOrEmpty(REFERENCIA) Then
                condicion = condicion & IIf(String.IsNullOrEmpty(condicion), "", " OR ") & " REFERENCIA = @P_REFERENCIA"
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, REFERENCIA, "P_REFERENCIA"))
            End If

            If Not String.IsNullOrEmpty(DESCRIPCION) Then
                DESCRIPCION = DESCRIPCION + "%"
                condicion = condicion & IIf(String.IsNullOrEmpty(condicion), "", " OR ") & " DESCRIPCION LIKE @P_DESCRIPCION"
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, DESCRIPCION, "P_DESCRIPCION"))
            End If
            If Not (String.IsNullOrEmpty(COD_PRODUCTO) And String.IsNullOrEmpty(REFERENCIA) And String.IsNullOrEmpty(DESCRIPCION)) Then
                sentencia = sentencia & condicion
                dtConsulta = conexion.Consulta(sentencia)
                conexion.Desconectar()
            End If
        End If
        Return dtConsulta
    End Function

    Public Shared Function Nuevo(Producto As Producto) As Resultado
        Dim conexion As New ConexionBD.ConexionBD()
        Dim oResultado As New Resultado
        oResultado.ExisteError = conexion.Conectar()
        If oResultado.ExisteError Then
            Dim sentencia As String
            Dim ok As Boolean = False
            sentencia = "sp_producto_i"

            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, Producto.codUsuario, "COD_USUARIO"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, Producto.codProducto, "COD_PRODUCTO"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, Producto.descripcion, "DESCRIPCION"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, Producto.referencia, "REFERENCIA"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, Producto.idUniMed, "ID_UNIDAD_MEDIDA"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, Producto.codTalla, "COD_TALLA"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, Producto.codColor, "COD_COLOR"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, Producto.ctrlSerial, "CTRL_SERIAL"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, Producto.idSubgrupo, "ID_SUBGRUPO"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, Producto.estante, "ESTANTE"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, Producto.bdReferencia, "BD_REFERENCIA"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, Producto.desuso, "DESUSO"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, Producto.nomArchivo, "NOM_ARCHIVO"))

            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, Producto.peso, "PESO"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, Producto.stockMin, "STOCK_MIN"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, Producto.stockMax, "STOCK_MAX"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, Producto.porcDcto, "PORC_DCTO"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, Producto.costoUni, "COSTO_UNIT"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, Producto.precio1, "PRECIO_1"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, Producto.precio2, "PRECIO_2"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, Producto.precio3, "PRECIO_3"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, Producto.porcIVA, "PORC_IVA"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, Producto.costoProm, "COSTO_PROM"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, Producto.porcUtil1, "PORC_UTIL_1"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, Producto.porcUtil2, "PORC_UTIL_2"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, Producto.porcUtil3, "PORC_UTIL_3"))

            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamOutChar(conexion, "", "P_ERROR"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamOutString(conexion, "", "P_MENSAJE"))

            ok = conexion.EjecutarProcedimiento(sentencia)
            oResultado.ExisteError = conexion.ExisteError
            oResultado.Mensaje = conexion.mensaje
            conexion.Desconectar()
        End If
        Return oResultado
    End Function

    Public Shared Function Nuevo(dtProd As DataTable) As Resultado
        Dim conexion As New ConexionBD.ConexionBD()
        Dim oResultado As New Resultado
        oResultado.ExisteError = conexion.Conectar()
        If oResultado.ExisteError Then
            Dim sentencia As String
            Dim ok As Boolean = False

            For Each rProd As DataRow In dtProd.Rows
                sentencia = "sp_producto_i"

                conexion.ParametroEntrada = New List(Of DbParameter)
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, rProd("ADMIN"), "COD_USUARIO"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, rProd("codigo"), "COD_PRODUCTO"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, rProd("descripcion "), "DESCRIPCION"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, rProd("referencia"), "REFERENCIA"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, rProd("CodUnidad"), "ID_UNIDAD_MEDIDA"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, rProd("CodTalla"), "COD_TALLA"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, rProd("CodColor"), "COD_COLOR"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, "", "CTRL_SERIAL"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, rProd("CodSubgrupo"), "ID_SUBGRUPO"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, "", "ESTANTE"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, rProd("Bodega_Ref"), "BD_REFERENCIA"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, "", "DESUSO"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, "", "NOM_ARCHIVO"))

                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, "", "PESO"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, rProd("Stock_Min"), "STOCK_MIN"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, rProd("Stock_Max"), "STOCK_MAX"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, rProd("Dcto"), "PORC_DCTO"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, rProd("Costo_Unit "), "COSTO_UNIT"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, rProd("Precio_1"), "PRECIO_1"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, rProd("Precio_2"), "PRECIO_2"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, rProd("Precio_3"), "PRECIO_3"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, rProd("IVA"), "PORC_IVA"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, "", "COSTO_PROM"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, "", "PORC_UTIL_1"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, "", "PORC_UTIL_2"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, "", "PORC_UTIL_3"))

                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamOutChar(conexion, "", "P_ERROR"))
                conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamOutString(conexion, "", "P_MENSAJE"))

                ok = conexion.EjecutarProcedimiento(sentencia)
                oResultado.ExisteError = conexion.ExisteError
                oResultado.Mensaje = conexion.mensaje
            Next

            conexion.Desconectar()
        End If
        Return oResultado
    End Function

    Public Shared Function existProducto(producto As Producto) As Boolean
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "select * from PRODUCTO where COD_PRODUCTO=@COD_PRODUCTO"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, _
                                                                              producto.codProducto, "COD_PRODUCTO"))
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If

        If dtConsulta.Rows.Count <= 0 Then
            Return False
        Else
            Return True
        End If
    End Function

    Public Shared Function existProducto(codProducto As String) As Boolean
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "select * from PRODUCTO where COD_PRODUCTO=@COD_PRODUCTO"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, codProducto, "COD_PRODUCTO"))
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If

        If dtConsulta.Rows.Count <= 0 Then
            Return False
        Else
            Return True
        End If
    End Function

    Public Shared Function existProducto() As Boolean
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "select COD_PRODUCTO from PRODUCTO"
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If

        If dtConsulta.Rows.Count <= 0 Then
            Return False
        Else
            Return True
        End If
    End Function

    Public Shared Function consCostoUni(ByRef id_grupo As Integer) As DataTable
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "select COD_PRODUCTO,DESCRIPCION,ID_UNIDAD_MEDIDA,COSTO_UNIT from producto " + _
                        "where id_subgrupo in (select id_subgrupo from subgrupo where id_grupo=@id_grupo) " + _
                        "ORDER BY COD_PRODUCTO ASC"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, _
                                                                              id_grupo, "id_grupo"))
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If
        Return dtConsulta
    End Function

    Public Shared Function consCostoUni(ByRef descripSubGr As String) As DataTable
        descripSubGr = descripSubGr + "%"
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "select COD_PRODUCTO,DESCRIPCION,ID_UNIDAD_MEDIDA,COSTO_UNIT from producto " + _
                        "where id_subgrupo in (select id_subgrupo from subgrupo where DESCRIPCION LIKE @DESCRIPCION) " + _
                        "ORDER BY COD_PRODUCTO ASC"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, _
                                                                              descripSubGr, "DESCRIPCION"))
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If
        Return dtConsulta
    End Function

    Public Shared Function consDescuento(ByRef id_grupo As Integer) As DataTable
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "select COD_PRODUCTO,DESCRIPCION,ID_UNIDAD_MEDIDA,PORC_DCTO from producto " + _
                        "where id_subgrupo in (select id_subgrupo from subgrupo where id_grupo=@id_grupo) " + _
                        "ORDER BY COD_PRODUCTO ASC"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, _
                                                                              id_grupo, "id_grupo"))
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If
        Return dtConsulta
    End Function

    Public Shared Function consDescuento(ByRef descripSubGr As String) As DataTable
        descripSubGr = descripSubGr + "%"
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "select COD_PRODUCTO,DESCRIPCION,ID_UNIDAD_MEDIDA,PORC_DCTO from producto " + _
                        "where id_subgrupo in (select id_subgrupo from subgrupo where DESCRIPCION LIKE @DESCRIPCION) " + _
                        "ORDER BY COD_PRODUCTO ASC"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, _
                                                                              descripSubGr, "DESCRIPCION"))
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If
        Return dtConsulta
    End Function

    Public Shared Function consPrecios(ByRef id_grupo As Integer) As DataTable
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "select COD_PRODUCTO,DESCRIPCION,ID_UNIDAD_MEDIDA,PRECIO_1,PRECIO_2,PRECIO_3 from producto " + _
                        "where id_subgrupo in (select id_subgrupo from subgrupo where id_grupo=@id_grupo) " + _
                        "ORDER BY COD_PRODUCTO ASC"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, _
                                                                              id_grupo, "id_grupo"))
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If
        Return dtConsulta
    End Function

    Public Shared Function consPrecios(ByRef descripSubGr As String) As DataTable
        descripSubGr = descripSubGr + "%"
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "select COD_PRODUCTO,DESCRIPCION,ID_UNIDAD_MEDIDA,PRECIO_1,PRECIO_2,PRECIO_3 from producto " + _
                        "where id_subgrupo in (select id_subgrupo from subgrupo where DESCRIPCION LIKE @DESCRIPCION) " + _
                        "ORDER BY COD_PRODUCTO ASC"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, _
                                                                              descripSubGr, "DESCRIPCION"))
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If
        Return dtConsulta
    End Function

    Public Shared Function ConsxDescripcion(descripcion As String) As DataTable
        descripcion = "%" + descripcion + "%"
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "SELECT COD_PRODUCTO AS CODIGO, PRODUCTO.DESCRIPCION,ID_UNIDAD_MEDIDA AS UNIDAD,REFERENCIA," + _
                        "EXISTENCIA," + _
                        "PRECIO_1 AS [PRECIO 1($)],PRECIO_1*(1+PORC_IVA/100) AS [PRECIO1 + IVA($)],PRECIO_2 AS [PRECIO 2($)]," + _
                        "PRECIO_2*(1+PORC_IVA/100) AS [PRECIO2 + IVA($)],PRECIO_3 AS [PRECIO 3($)]," + _
                        "PRECIO_3*(1+PORC_IVA/100) AS [PRECIO3 + IVA($)], BD_REFERENCIA AS [BODEGA REFERENCIA], " + _
                        "PORC_IVA AS [IVA(%)],PORC_DCTO AS DESCUENTO,TALLA.DESCRIPCION AS TALLA," + _
                        "COLOR,SUBGRUPO.DESCRIPCION AS [SUBGRUPO],PESO," + _
                        "ESTANTE " + _
                        "FROM PRODUCTO INNER JOIN COLOR ON " + _
                        "PRODUCTO.COD_COLOR=COLOR.COD_COLOR INNER JOIN TALLA ON " + _
                        "PRODUCTO.COD_TALLA=TALLA.COD_TALLA INNER JOIN SUBGRUPO ON " + _
                        "producto.ID_SUBGRUPO = SubGrupo.ID_SUBGRUPO " + _
                        "WHERE  PRODUCTO.DESCRIPCION LIKE @DESCRIPCION;"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, _
                                                                              descripcion, "DESCRIPCION"))
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If
        Return dtConsulta
    End Function

    Public Shared Function ConsxCodProd(producto As Producto) As DataTable
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "select * from PRODUCTO where COD_PRODUCTO=@COD_PRODUCTO ORDER BY COD_PRODUCTO ASC"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, _
                                                                              producto.codProducto, "COD_PRODUCTO"))
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If
        Return dtConsulta
    End Function

    Public Shared Function ConsxCodProd(codProducto As String) As DataTable
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "select * from PRODUCTO where COD_PRODUCTO=@COD_PRODUCTO ORDER BY COD_PRODUCTO ASC"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, codProducto, "COD_PRODUCTO"))
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If
        Return dtConsulta
    End Function

    Public Shared Function ConsxCodProducto(codProducto As String) As Producto
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        Dim oProd As New Producto
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "select * from PRODUCTO where COD_PRODUCTO=@COD_PRODUCTO ORDER BY COD_PRODUCTO ASC"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, codProducto, "COD_PRODUCTO"))
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
            If dtConsulta.Rows.Count > 0 Then
                oProd.codProducto = dtConsulta.Rows(0)("COD_PRODUCTO")
                oProd.bdReferencia = dtConsulta.Rows(0)("BD_REFERENCIA")
                oProd.codColor = dtConsulta.Rows(0)("COD_COLOR")
                oProd.codTalla = dtConsulta.Rows(0)("COD_TALLA")
                oProd.codUsuario = dtConsulta.Rows(0)("COD_USUARIO")
                oProd.costoProm = dtConsulta.Rows(0)("COSTO_PROM")
                oProd.costoUni = dtConsulta.Rows(0)("COSTO_UNIT")
                oProd.ctrlSerial = dtConsulta.Rows(0)("CTRL_SERIAL")
                oProd.descripcion = dtConsulta.Rows(0)("DESCRIPCION")
                oProd.desuso = dtConsulta.Rows(0)("DESUSO")
                oProd.estante = dtConsulta.Rows(0)("ESTANTE")
                oProd.existencia = dtConsulta.Rows(0)("EXISTENCIA")
                oProd.existIni = dtConsulta.Rows(0)("EXIST_INI")
                oProd.existPendi = dtConsulta.Rows(0)("EXIST_PENDIENTE")
                oProd.idSubgrupo = dtConsulta.Rows(0)("ID_SUBGRUPO")
                oProd.idUniMed = dtConsulta.Rows(0)("ID_UNIDAD_MEDIDA")
                oProd.nomArchivo = dtConsulta.Rows(0)("NOM_ARCHIVO").ToString
                oProd.peso = dtConsulta.Rows(0)("PESO")
                oProd.porcDcto = dtConsulta.Rows(0)("PORC_DCTO")
                oProd.porcIVA = dtConsulta.Rows(0)("PORC_IVA")
                oProd.porcUtil1 = dtConsulta.Rows(0)("PORC_UTIL_1")
                oProd.porcUtil2 = dtConsulta.Rows(0)("PORC_UTIL_2")
                oProd.porcUtil3 = dtConsulta.Rows(0)("PORC_UTIL_3")
                oProd.precio1 = dtConsulta.Rows(0)("PRECIO_1")
                oProd.precio2 = dtConsulta.Rows(0)("PRECIO_2")
                oProd.precio3 = dtConsulta.Rows(0)("PRECIO_3")
                oProd.referencia = dtConsulta.Rows(0)("REFERENCIA")
                oProd.stockMax = dtConsulta.Rows(0)("STOCK_MAX")
                oProd.stockMin = dtConsulta.Rows(0)("STOCK_MIN")
            End If
        End If
        Return oProd
    End Function


    Public Shared Function ConsInvProd() As DataTable
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "select COD_PRODUCTO,DESCRIPCION,REFERENCIA,ID_UNIDAD_MEDIDA,EXISTENCIA from PRODUCTO"
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If
        Return dtConsulta
    End Function

    Public Shared Function ConsInvProdEnUso() As DataTable
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "select COD_PRODUCTO,DESCRIPCION,REFERENCIA,ID_UNIDAD_MEDIDA,EXISTENCIA from PRODUCTO WHERE DESUSO='N'"
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If
        Return dtConsulta
    End Function

    Public Shared Function ConsCodProd() As DataTable
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "select COD_PRODUCTO from PRODUCTO ORDER BY COD_PRODUCTO ASC"
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If
        Return dtConsulta
    End Function

    Public Shared Function ConsPrimerProd() As DataTable
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "SELECT TOP 1 COD_PRODUCTO,COD_USUARIO, ID_UNIDAD_MEDIDA,COD_TALLA,COD_COLOR," + _
                "ID_SUBGRUPO, DESCRIPCION, REFERENCIA, PESO, STOCK_MIN, STOCK_MAX, COSTO_UNIT, PRECIO_1," + _
                "PRECIO_2, PRECIO_3, PORC_DCTO, PORC_IVA, COSTO_PROM, estante, BD_REFERENCIA, PORC_UTIL_1,EXISTENCIA," + _
                "PORC_UTIL_2, PORC_UTIL_3, CTRL_SERIAL, desuso, NOM_ARCHIVO,FECHA_REGISTRO FROM PRODUCTO ORDER BY COD_PRODUCTO ASC"
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If
        Return dtConsulta
    End Function

    Public Shared Function ConsUltimoProd() As DataTable
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "SELECT TOP 1 COD_PRODUCTO,COD_USUARIO, ID_UNIDAD_MEDIDA,COD_TALLA,COD_COLOR," + _
                "ID_SUBGRUPO, DESCRIPCION, REFERENCIA, PESO, STOCK_MIN, STOCK_MAX, COSTO_UNIT, PRECIO_1," + _
                "PRECIO_2, PRECIO_3, PORC_DCTO, PORC_IVA, COSTO_PROM, estante, BD_REFERENCIA, PORC_UTIL_1,EXISTENCIA," + _
                "PORC_UTIL_2, PORC_UTIL_3, CTRL_SERIAL, desuso, NOM_ARCHIVO,FECHA_REGISTRO  FROM PRODUCTO ORDER BY COD_PRODUCTO DESC"
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If
        Return dtConsulta
    End Function

    Public Shared Function ConsSiguienteProd(producto As Producto) As DataTable
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "SELECT TOP 1 COD_PRODUCTO,COD_USUARIO, ID_UNIDAD_MEDIDA,COD_TALLA,COD_COLOR," + _
                "ID_SUBGRUPO, DESCRIPCION, REFERENCIA, PESO, STOCK_MIN, STOCK_MAX, COSTO_UNIT, PRECIO_1," + _
                "PRECIO_2, PRECIO_3, PORC_DCTO, PORC_IVA, COSTO_PROM, estante, BD_REFERENCIA, PORC_UTIL_1," + _
                "PORC_UTIL_2, PORC_UTIL_3, CTRL_SERIAL, desuso, NOM_ARCHIVO,FECHA_REGISTRO,EXISTENCIA  " + _
                "FROM PRODUCTO WHERE COD_PRODUCTO>@COD_PRODUCTO ORDER BY COD_PRODUCTO ASC;"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, _
                                                                              producto.codProducto, "COD_PRODUCTO"))
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If
        Return dtConsulta
    End Function

    Public Shared Function ConsAnteriorProd(producto As Producto) As DataTable
        Dim conexion As New ConexionBD.ConexionBD()
        Dim dtConsulta As New DataTable
        If conexion.Conectar() Then
            Dim sentencia As String
            sentencia = "SELECT TOP 1 COD_PRODUCTO,COD_USUARIO, ID_UNIDAD_MEDIDA,COD_TALLA,COD_COLOR," + _
                "ID_SUBGRUPO, DESCRIPCION, REFERENCIA, PESO, STOCK_MIN, STOCK_MAX, COSTO_UNIT, PRECIO_1," + _
                "PRECIO_2, PRECIO_3, PORC_DCTO, PORC_IVA, COSTO_PROM, estante, BD_REFERENCIA, PORC_UTIL_1," + _
                "PORC_UTIL_2, PORC_UTIL_3, CTRL_SERIAL, desuso, NOM_ARCHIVO,FECHA_REGISTRO,EXISTENCIA  " + _
                "FROM PRODUCTO WHERE COD_PRODUCTO<@COD_PRODUCTO ORDER BY COD_PRODUCTO DESC;"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, _
                                                                              producto.codProducto, "COD_PRODUCTO"))
            dtConsulta = conexion.Consulta(sentencia)
            conexion.Desconectar()
        End If
        Return dtConsulta
    End Function

    Public Shared Function Actualizar(producto As Producto) As Resultado
        Dim conexion As New ConexionBD.ConexionBD()
        Dim oResultado As New Resultado
        oResultado.ExisteError = conexion.Conectar()
        If oResultado.ExisteError Then
            Dim sentencia As String
            Dim ok As Boolean = False
            sentencia = "SP_PRODUCTO_U"

            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, producto.codUsuario, "COD_USUARIO"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, producto.codProducto, "COD_PRODUCTO"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, producto.descripcion, "DESCRIPCION"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, producto.referencia, "REFERENCIA"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, producto.idUniMed, "ID_UNIDAD_MEDIDA"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, producto.codTalla, "COD_TALLA"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, producto.codColor, "COD_COLOR"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, producto.ctrlSerial, "CTRL_SERIAL"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, producto.idSubgrupo, "ID_SUBGRUPO"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, producto.estante, "ESTANTE"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, producto.bdReferencia, "BD_REFERENCIA"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, producto.desuso, "DESUSO"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, producto.nomArchivo, "NOM_ARCHIVO"))

            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, producto.peso, "PESO"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, producto.stockMin, "STOCK_MIN"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, producto.stockMax, "STOCK_MAX"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, producto.porcDcto, "PORC_DCTO"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, producto.costoUni, "COSTO_UNIT"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, producto.precio1, "PRECIO_1"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, producto.precio2, "PRECIO_2"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, producto.precio3, "PRECIO_3"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, producto.porcIVA, "PORC_IVA"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, producto.costoProm, "COSTO_PROM"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, producto.porcUtil1, "PORC_UTIL_1"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, producto.porcUtil2, "PORC_UTIL_2"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, producto.porcUtil3, "PORC_UTIL_3"))

            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamOutChar(conexion, "", "P_ERROR"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamOutString(conexion, "", "P_MENSAJE"))


            ok = conexion.EjecutarProcedimiento(sentencia)
            oResultado.ExisteError = conexion.ExisteError
            oResultado.Mensaje = conexion.mensaje
            conexion.Desconectar()
        End If
        Return oResultado
    End Function

    Public Shared Function ActualizarCosto(ByRef prod As Producto) As Resultado
        Dim conexion As New ConexionBD.ConexionBD()
        Dim oResultado As New Resultado
        oResultado.ExisteError = conexion.Conectar()
        If oResultado.ExisteError Then
            Dim sentencia As String
            sentencia = "update PRODUCTO set COSTO_UNIT=@COSTO_UNIT where COD_PRODUCTO=@COD_PRODUCTO"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, prod.costoUni, "COSTO_UNIT"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, prod.codProducto, "COD_PRODUCTO"))
            oResultado.ExisteError = conexion.EjecutarSql(sentencia)
            oResultado.FilasAfectadas = conexion.NumFilasAfectadas
            oResultado.Mensaje = conexion.mensaje
            conexion.Desconectar()
        End If
        Return oResultado
    End Function

    Public Shared Function ActualizarDesc(ByRef prod As Producto) As Resultado
        Dim conexion As New ConexionBD.ConexionBD()
        Dim oResultado As New Resultado
        oResultado.ExisteError = conexion.Conectar()
        If oResultado.ExisteError Then
            Dim sentencia As String
            sentencia = "update PRODUCTO set PORC_DCTO=@PORC_DCTO where COD_PRODUCTO=@COD_PRODUCTO"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, prod.porcDcto, "PORC_DCTO"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, prod.codProducto, "COD_PRODUCTO"))
            oResultado.ExisteError = conexion.EjecutarSql(sentencia)
            oResultado.FilasAfectadas = conexion.NumFilasAfectadas
            oResultado.Mensaje = conexion.mensaje
            conexion.Desconectar()
        End If
        Return oResultado
    End Function

    Public Shared Function ActualizarPrecios(ByRef prod As Producto) As Resultado
        Dim conexion As New ConexionBD.ConexionBD()
        Dim oResultado As New Resultado
        oResultado.ExisteError = conexion.Conectar()
        If oResultado.ExisteError Then
            Dim sentencia As String
            sentencia = "update PRODUCTO set PRECIO_1=@PRECIO_1,PRECIO_2=@PRECIO_2,PRECIO_3=@PRECIO_3 where COD_PRODUCTO=@COD_PRODUCTO"
            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, prod.precio1, "PRECIO_1"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, prod.precio2, "PRECIO_2"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInDecimal(conexion, prod.precio3, "PRECIO_3"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, prod.codProducto, "COD_PRODUCTO"))
            oResultado.ExisteError = conexion.EjecutarSql(sentencia)
            oResultado.FilasAfectadas = conexion.NumFilasAfectadas
            oResultado.Mensaje = conexion.mensaje
            conexion.Desconectar()
        End If
        Return oResultado
    End Function

    Public Shared Function Eliminar(producto As Producto) As Resultado
        Dim conexion As New ConexionBD.ConexionBD()
        Dim oResultado As New Resultado
        oResultado.ExisteError = conexion.Conectar()
        If oResultado.ExisteError Then
            Dim sentencia As String
            Dim ok As Boolean = False
            sentencia = "SP_PRODUCTO_D"

            conexion.ParametroEntrada = New List(Of DbParameter)
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamInString(conexion, producto.codProducto, "COD_PRODUCTO"))

            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamOutChar(conexion, "", "P_ERROR"))
            conexion.ParametroEntrada.Add(ConexionBD.ConexionBD.ParamOutString(conexion, "", "P_MENSAJE"))

            ok = conexion.EjecutarProcedimiento(sentencia)
            oResultado.ExisteError = conexion.ExisteError
            oResultado.Mensaje = conexion.mensaje
            conexion.Desconectar()
        End If
        Return oResultado
    End Function

End Class
